#ifndef FUNCIONCOSTO_H
#define FUNCIONCOSTO_H

#include "Grafo.h"

#ifndef INFINITO
#define INFINITO 999999999
#endif

template <class V, class A>
class FuncionCosto abstract
{
public:
	FuncionCosto(const Puntero<Grafo<V, A>>& grafo)
	{
		this->grafo = grafo;
	}

	nat Evaluar(const V& v1, const V& v2)
	{
		if (grafo->ExisteArco(v1, v2))
			return EvaluarArco(v1, v2);
		else
			return INFINITO;
	}

protected:
	Puntero<Grafo<V, A>> grafo;

	virtual nat EvaluarArco(const V& v1, const V& v2) abstract;
};

#endif